package top.lishuoboy.cors.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/** 2.跨域全局配置方式-SpringMvc */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    /**
     * <h2>【2.跨域全局配置方式-SpringMvc ：重写 WebMvcConfigurer.addCorsMappings()，设置 registry.addMapping("/**").allowedOrigins("*")等响应头参数（只对SpringMvc写法生效，对原生Servlet不生效）】</h2>
     * <h3>【4种跨域实现方式 及 优先级（从高到低）】https://blog.csdn.net/lishuoboy/article/details/141123142</h3>
     * <div> 1.跨域全局配置方式-Filter(全适用)：重写 Filter.doFilter()，设置 res.setHeader("Access-Control-Allow-Origin", "*") 等响应头参数</div>
     * <div> 2.跨域全局配置方式-SpringMvc    ：重写 WebMvcConfigurer.addCorsMappings()，设置 registry.addMapping("/**").allowedOrigins("*")等响应头参数（只对SpringMvc写法生效，对原生Servlet不生效）</div>
     * <div> 3.跨域单个配置方式-WebServlet   ：设置 res.addHeader("Access-Control-Allow-Origin", "*") 等响应头参数</div>
     * <div> 4.跨域单个配置方式-SpringMvc    ：添加 @CrossOrigin注解，设置origins等响应头参数（只对SpringMvc写法生效，对原生Servlet不生效）</div>
     * <h3>【其他参考文章】</h3>
     * <div> 1. @CrossOrigin详细参数说明 https://www.jb51.net/program/305133q17.htm</div>
     * <div> 2. SpringBoot处理跨域请求的四种方法 https://www.jb51.net/program/30726178v.htm</div>
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
//        registry.addMapping("/**")                                                   // 适配@RequestMapping。 (例如：/ajax/** 开头的)
//            // 下面几个参数，不配置，会使用默认值
//            .allowedOrigins("http://localhost:63342", "*")                              //【跨域配置】[必需]               允许请求源：默认值为"*"，即允许所有。相当于res.setHeader("Access-Control-Allow-Origin", )
//            .allowedOriginPatterns("http://localhost:63342", "http://*", "*")           //【跨域配置】[必需]               允许请求源：默认值为"*"，即允许所有。相当于res.setHeader("Access-Control-Allow-Origin", )
//            .allowedMethods(RequestMethod.GET.name(), "*")                              //【跨域配置】[有复杂请求方法时必需]  允许请求方法：默认值为GET,POST,HEAD。相当于res.setHeader("Access-Control-Allow-Methods", )
//            .allowedHeaders("My-Name", "*")                                             //【跨域配置】[有复杂请求头时必需]    允许请求头 ：默认值为"*"，即允许所有。相当于res.setHeader("Access-Control-Allow-Headers", )
//            .maxAge(5)                                                                  //【跨域配置】[非必需]             预检缓存时长：默认值 1800秒。小于等于0时缓存无效【注意浏览器不要禁用缓存，否则不生效】。相当于res.setHeader("Access-Control-Max-Age", )
        ;
    }
}
